package org.huawei260.TiKu.B;

import java.util.Scanner;

/**
 * @Auther: qingle
 * @Date: 2024/10/28-12:19
 * @Description:
 *
 * 给定一个仅包含0和1的N*N二维矩阵，请计算二维矩阵的最大值，计算规则如下:
 *
 * 1. 每行元素按下标顺序组成一个二进制数(下标越大越排在低位)，二进制数的值就是该行的值，矩阵各行值之和为矩阵的值。
 *
 * 2. 允许通过向左或向右整体循环移动每行元素来改变各元素在行中的位置 比如:
 *
 * [1,0,1,1,1]向右整体循环移动2位变为[1,1,1,0,1]，二进制数为11101，值为29
 *
 * [1,0,1,1,1]向左整体循环移动2位变为[1,1,1,1,0]，二进制数为11110，值为30。
 *
 * 输入格式
 * 1、输入的第一行为正整数，记录了N的大小，0 < N <= 20
 *
 * 2、输入的第2到N+1行为二维矩阵信息，行内元素 边角逗号分隔。
 *
 * 输出格式
 * 矩阵的最大值。
 *
 * @version: 1.0
 */
public class B_2517_矩阵最大值2 {

//	public class MaxBinaryValue {
		public static void main(String[] args) {
			String binaryString = "1,0,1,0,1"; // 示例字符串
			System.out.println("The maximum binary value is: " + findMaxBinaryValue(binaryString));
		}

	static int findMaxBinaryValue(String binaryString) {

		String[] binaryArray = binaryString.split(",");
		// 将数组元素连接成一个字符串
		binaryString = String.join("", binaryArray);
		int maxVal = Integer.parseInt(binaryString, 2); // 将字符串转换为二进制数

		// 循环移动字符串中的位
		for (int i = 1; i < binaryString.length(); i++) {
			// 计算循环移动后的二进制数
			String shiftedBinaryString = binaryString.substring(i) + binaryString.substring(0, i);
			int shiftedVal = Integer.parseInt(shiftedBinaryString, 2);
			maxVal = Math.max(maxVal, shiftedVal); // 找到最大值
		}

		return maxVal;
	}
}
